﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HCQ2_Model.Data;

namespace HCQ2_Model.Pay
{
    /// <summary>
    /// 接口，获取订单列表参数
    /// </summary>
    public class GetOrderListParams:PageUser,IOrderID, IValidatableObject,IParentOrderID
    {
        /// <summary>
        /// 【必填】订单类别;0(全部)、1(买入)、2(卖出)
        /// </summary>
        [Required(ErrorMessage ="订单类别不能为空")]
        [Range(0,2,ErrorMessage = "订单类别值无效，只能：0(全部)、1(买入)、2(卖出)")]
        public Nullable<int> OrderType { get; set; }

        /// <summary>
        /// 关键字，模糊匹配以下字段：订单号、商品名称、购买人
        /// </summary>
        /// 2020-4-10，添加原因：微信群谭要求的，因为后台有这个
        public string Search { get; set; }

        /// <summary>
        /// 订单号
        /// </summary>
        public string OrderCode { get; set; }
        /// <summary>
        /// 父订单号
        /// </summary>
        public string ParentOrderCode { get; set; }
        /// <summary>
        /// 商品名称
        /// </summary>
        public string FileName { get; set; }
        /// <summary>
        /// 购买人
        /// </summary>
        public string Purchaser { get; set; }
        /// <summary>
        /// 产品类别;1(VRPPT)、2(创客)、3(头记)、4（校史馆）
        /// </summary>
        public Nullable<int> ProType { get; set; }
        /// <summary>
        /// 商品期限;1(1个月)、3(3个月)、6(6个月)、12(一年)
        /// </summary>
        public Nullable<int> PurchasePeriod { get; set; }
        /// <summary>
        /// 付款方式;1(金币)、2(微信)、3(支付宝)
        /// </summary>
        public Nullable<int> PayMethod { get; set; }
        /// <summary>
        /// 订单状态;1(等待买家付款)、(2买家已付款)、4(交易成功)、5(交易关闭)、6(退款中)
        /// </summary>
        /// <remarks>
        /// 20191112;老谭说去掉3(卖家已确认)
        /// </remarks>
        public Nullable<int> OrderState { get; set; }
        /// <summary>
        /// 订单来源;pc、web、mobile、wechat
        /// </summary>
        public string OrderSource { get; set; }
        /// <summary>
        /// 起始下单时间
        /// </summary>
        public Nullable<DateTime> OrderCreateTimeStart { get; set; }
        /// <summary>
        /// 截止下单时间
        /// </summary>
        public Nullable<DateTime> OrderCreateTimeEnd { get; set; }

        /// <summary>
        /// vrType 类别【素材=0；作品=1；组件=2；度度圈=3；元宇宙=4；】
        /// </summary>
        [Range(0, 4, ErrorMessage = "VRType类别值无效，只能：0(素材)、1(作品)、2(组件)、3(度度圈)、4(元宇宙)")]
        public int? VRType { get; set; }

        #region 需求《VLions需求规格_度度圈接口需求_订单及购物车-202100909.docx》添加的内容

        /// <summary>
        /// 为空，返回所有店铺的订单
        /// </summary>
        public int? StoreID { get; set; }

        /// <summary>
        /// 为空返回所有备货状态的订单；0=待备货（默认值）、1=备货中、2=备货完成、3=已发货
        /// </summary>
        public List<int> StorageStatus { get; set; }

        /// <summary>
        /// 下单类别；0=普通下单（默认值），1=扫码点餐下单
        /// </summary>
        /// <remarks>
        /// 对应订单表的名称 OrderType ，因为文档的问题，此参数中已经有这个名称了，添加后发现
        /// </remarks>
        public int? SubmitType { get; set; }

        /// <summary>
        /// 返回所有类别（目录）的商品的订单
        /// </summary>
        public int? FolderID { get; set; }

        /// <summary>
        /// 排序类别：0：创建时间倒序、1：创建时间正序；不传为空默认按倒序；2=按付款时间降序
        /// </summary>
        /// <remarks>
        /// 2022-01-23：老谭微信发的需求，加类别：2
        /// </remarks>
        public int SortType { get; set; } = 0;
        #endregion


        /// <summary>
        /// 付款开始时间
        /// </summary>
        /// <remarks>
        /// 2022-01-23：需求《度度圈需求规格-订单统计-20220120.docx》添加
        /// </remarks>
        public DateTime? PayDateStart { get; set; }

        /// <summary>
        /// 付款截止时间
        /// </summary>
        /// <remarks>
        /// 2022-01-23：需求《度度圈需求规格-订单统计-20220120.docx》添加
        /// </remarks>
        public DateTime? PayDateEnd { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            GetOrderListParams param = validationContext.ObjectInstance as GetOrderListParams;

            if (param != null)
            {
                if (!string.IsNullOrEmpty(param.OrderSource) && 
                    !OrderSourceEnum.pc.Equals(param.OrderSource)
                    && !OrderSourceEnum.web.Equals(param.OrderSource)
                    && !OrderSourceEnum.mobile.Equals(param.OrderSource)
                    && !OrderSourceEnum.wechat.Equals(param.OrderSource))
                {
                    yield return new ValidationResult("订单来源值无效，必须是：pc、web、mobile、wechat其中之一", new string[] { "OrderSource" });
                }
            }
        }
    }
}
